/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Application;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Collections;
import javax.swing.JOptionPane;

/**
 * Classe contenant les trophées et le tableau des pointages et qui permet
 * de les sérialiser pour les y avoir accès lors de nouvelles parties.
 * @author Pascal
 */

public class Donnee implements Serializable {

    
    public int nbParties, nbBibittes, nbPoints, nbOvnis;
    public boolean bazingaObtenu;
    public String dernierAchievement = "";
    ListeScores highScores = new ListeScores();

    /**
     * Constructeur.
     * @param monde Monde dans lequel la classe est créée.
     */
    public Donnee() {
        
    }

    /**
     * Affiche un JOptionPane contenant tous les trophées obtenables et 
     * la progression du joueur dans l'obtention de ces derniers.
     */
    public void afficherTrophees() {
        String obtenu = "en cours";

        if (nbParties >= 1) {
            obtenu = "obtenu";

        } else {
            obtenu = "en cours";
        }
        String noob = "n00b (" + obtenu + ") : " + nbParties + " / 1 partie complétée\n";
        if (nbParties >= 10) {
            obtenu = "obtenu";

        } else {
            obtenu = "en cours";
        }
        String own = "Own (" + obtenu + ") : " + nbParties + " / 10 parties complétées\n";
        if (nbParties >= 1000) {
            obtenu = "obtenu";

        } else {
            obtenu = "en cours";
        }
        String addict = "Addict (" + obtenu + ") : " + nbParties + " / 1000 parties complétées\n";
        if (nbBibittes >= 100) {
            obtenu = "obtenu";
        } else {
            obtenu = "en cours";
        }
        String nuke = "Nuke (" + obtenu + ") : " + nbBibittes + " / 100 examens de maths violentés\n";
        if (nbOvnis >= 200) {
            obtenu = "obtenu";
        } else {
            obtenu = "en cours";
        }
        String muchoViolento = "Mucho violento (" + obtenu + ") : " + nbOvnis + " / 200 ovnis détruits\n";
        if (nbPoints >= 2500) {
            obtenu = "obtenu";
        } else {
            obtenu = "en cours";
        }
        String pro = "Pro (" + obtenu + ") : " + nbPoints + " / 2500 points obtenus\n";
        if (nbPoints >= 10000) {
            obtenu = "obtenu";
        } else {
            obtenu = "en cours";
        }
        String leet = "1337 (" + obtenu + ") : " + nbPoints + " / 10000 points obtenus\n";
        if (bazingaObtenu) {
            obtenu = "obtenu";
        } else {
            obtenu = "en cours";
        }
        String bazinga = "Bazinga! (" + obtenu + ") : terminer une partie avec 0 points\n";

        String message = noob + own + addict + nuke + muchoViolento + pro + leet + bazinga;


        JOptionPane.showMessageDialog(null, message, "Trophées", JOptionPane.INFORMATION_MESSAGE);
    }
    
    /**
     * Affiche un JOptionPane contenant le tableau des pointages, associés à un
     * nom de 3 lettres, obtenus par les joueurs sur un ordinateur.
     */

    public void afficherScores() {
        String message = "TABLEAU DES POINTAGES\n----------------------------------\n";
        try{
            Collections.sort(highScores, new ComparateurScore());
            
        for (Score highScore : highScores) {
            message += highScore.nom.toUpperCase() + " : " + highScore.points + " POINTS\n";
        }
        } catch(Exception e) {}

        JOptionPane.showMessageDialog(null, message, "Pointages", JOptionPane.INFORMATION_MESSAGE);
    }

    public void nouveauScore(int points, String nom) {
        Score highScore = new Score(points, nom);
        int position=highScores.size();

        if (highScores.isEmpty()) {
            highScores.add(highScore);
        } else {

            for (int i = 0; i < highScores.size(); i++) {
                if (highScore.points > highScores.get(i).points) {
                position=i;  
                }
            }
             highScores.add(position, highScore);
        }
    }

    /**
     * Sérialise les données.
     * Permet de conserver les trophées et les pointages.
     */
    public void serialiser() {

        try {
            FileOutputStream fos = new FileOutputStream("donnees.dat");
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(this);
            oos.flush();
            oos.close();
        } catch (java.io.IOException e) {
            e.printStackTrace();
        }
    }
    /**
     * Désérialise les données.
     * Va chercher les informations sauvegardées sur les trophées et les pointages.
     */

    public void deserialiser() {
        Donnee donnees;
        try {
            FileInputStream fichier = new FileInputStream("donnees.dat");
            ObjectInputStream ois = new ObjectInputStream(fichier);
            donnees = (Donnee) ois.readObject();
            
            nbParties = donnees.nbParties; 
            nbBibittes = donnees.nbBibittes;
            nbOvnis = donnees.nbOvnis;
            nbPoints = donnees.nbPoints;
            bazingaObtenu = donnees.bazingaObtenu;
            highScores = donnees.highScores;
            dernierAchievement = donnees.dernierAchievement;

        } 
        catch(java.io.FileNotFoundException e){
         }
        catch (java.io.IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}
